#include <utl/memory.h>
#include <mimalloc.h>
//
//namespace utl
//{
//	namespace _internal
//	{
//		/*struct HEAP_DELETER
//		{
//			void operator()(mi_heap_t* ptr)const noexcept
//			{
//				mi_heap_destroy(ptr);
//			}
//		};
//
//		using heap_ptr = eastl::unique_ptr<mi_heap_t, HEAP_DELETER>;
//
//		static heap_ptr& get_heap_ptr()
//		{
//			static heap_ptr hp{ mi_heap_new() };
//			return hp;
//		}*/
//
//		/*void* utl_mem_alloc(size_t size)
//		{
//			return mi_malloc(size);
//		}
//
//		void utl_free(void* ptr)
//		{
//			mi_free(ptr);
//		}*/
//	}
//}

template<typename T>
inline void utl::_internal::default_delete<T>::operator()(T* p) const noexcept
{
	static_assert(eastl::internal::is_complete_type_v<T>, "Attempting to call the destructor of an incomplete type");
	p->~T();
	mi_free(p);
}